<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

namespace Api\Model;
use Think\Model;

/**
 * 用户模型
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */

class AgentModel extends Model {

    /* 用户模型自动验证 */
    protected $_validate = array(
        /* 验证用户名 */
        array('username', '', -3, self::EXISTS_VALIDATE, 'unique'), //用户名被占用

    );




    /**
     * 登录指定用户
     * @param  string $username 用户
     * @param  string $password 密码
     * @return boolean      ture-登录成功，false-登录失败
     */
    public function login($username, $password){
        $map['username']=$username;
        /* 获取用户数据 */
        $user = $this->where($map)->find();
        if(is_array($user)){
            /* 验证用户密码 */
            if(think_ucenter_md5($password, UC_AUTH_KEY) === $user['password']){
                
                $this->autoLogin($user); //更新用户登录信息
                return $user['uid']; //登录成功，返回用户ID
            } else {
                return -2; //密码错误
            }
        } else {
            return -1; //用户不存在
        }
    }


    /**
     * 登录指定用户
     *
     * @param integer $uid
     *        	用户ID
     * @return boolean ture-登录成功，false-登录失败
     */
    public function wx_login($uid) {
        /* 检测是否在当前应用注册 */
        $user = $this->find ( $uid );
        if(is_array($user)){

            if($user['status']!=1){
                return $user['status'];
            }else{
                $this->autoLogin($user); //更新用户登录信息
                return $user['uid']; //登录成功，返回用户ID
            }

        } else {
            return -1; //用户不存在
        }


    }


    /**
     * 注册一个新用户
     *  @param array  $data  用户
     * @return integer   注册成功-用户信息，注册失败-错误编号
     */
    public function register($data){
        /* 添加用户 */
        if($this->create($data)){
            $uid = $this->add();
            return $uid ? $uid : 0; //0-未知错误，大于0-注册成功
        } else {
            return $this->getError(); //错误详情见自动验证注释
        }
    }

    /**
     * 修改信息
     *  @param array  $data  用户
     * @return integer   成功-用户信息，失败-错误编号
     */
    public function updateInfo($password,$data){
        //更新前检查用户密码
        if(!$this->verifyUser($data['uid'], $password)){
            return ['status'=>0,'info'=>'原密码不正确！'];
        }

        //更新用户信息
        $data = $this->create($data);
        if($data){
            $re=$this->where(array('uid'=>$data['uid']))->save($data);
            if($re===false){
                return ['status'=>0,'info'=>'修改错误！'];
            }else{
                return ['status'=>1,'info'=>'修改成功！'];
            }
        }
        return ['status'=>0,'info'=>'修改错误！'];
    }


    /**
     * 验证用户密码
     * @param int $uid 用户id
     * @param string $password_in 密码
     * @return true 验证成功，false 验证失败
     * @author huajie <banhuajie@163.com>
     */
    protected function verifyUser($uid, $password_in){
        $password = $this->where(array('uid'=>$uid))->getField('password');
        if(think_ucenter_md5($password_in, UC_AUTH_KEY) === $password){
            return true;
        }
        return false;
    }


    /**
     * 注销当前用户
     * @return void
     */
    public function logout(){
        session('user_auth', null);
        session('user_auth_sign', null);
    }

    /**
     * 自动登录用户
     * @param  integer $user 用户信息数组
     */
    public function autoLogin($user){
        $userinfo=session ( 'user_auth');
        /* 更新登录信息 */
        $data = array(
            'uid'             => $user['uid'],
            'last_login_time' => NOW_TIME,
            'last_login_ip'   => get_client_ip(1),
            'wx_openid'=>$userinfo['openid'],
        );
        $this->save($data);


        $userinfo['uid']=$user['uid'];
        $userinfo['username']=$user['username'];

        /* 记录登录SESSION和COOKIES */
        session('user_auth', $userinfo);
        session('user_auth_sign', data_auth_sign($userinfo));
    }

    public function getNickName($uid){
        return $this->where(array('uid'=>(int)$uid))->getField('nickname');
    }

}
